package com.ruoyi.binance.service.impl;

import java.util.List;

import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.binance.mapper.BinanceMinKMapper;
import com.ruoyi.binance.domain.BinanceMinK;
import com.ruoyi.binance.service.IBinanceMinKService;

/**
 * 分钟实时K线数据Service业务层处理
 * 
 * @author zq
 * @date 2025-08-05
 */
@Service
public class BinanceMinKServiceImpl implements IBinanceMinKService 
{
    @Autowired
    private BinanceMinKMapper binanceMinKMapper;

    /**
     * 查询分钟实时K线数据
     * 
     * @param code 分钟实时K线数据主键
     * @return 分钟实时K线数据
     */
    @Override
    public BinanceMinK selectBinanceMinKByCode(String code)
    {
        return binanceMinKMapper.selectLastBinanceMinKByCode(code);
    }

    /**
     * 查询分钟实时K线数据列表
     * 
     * @param binanceMinK 分钟实时K线数据
     * @return 分钟实时K线数据
     */
    @Override
    public List<BinanceMinK> selectBinanceMinKList(BinanceMinK binanceMinK)
    {
        return binanceMinKMapper.selectBinanceMinKList(binanceMinK);
    }

    /**
     * 新增分钟实时K线数据
     * 
     * @param binanceMinK 分钟实时K线数据
     * @return 结果
     */
    @Override
    public int insertBinanceMinK(BinanceMinK binanceMinK)
    {
        binanceMinK.setCreateTime(DateUtils.getNowDate());
        return binanceMinKMapper.insertBinanceMinK(binanceMinK);
    }

    /**
     * 修改分钟实时K线数据
     * 
     * @param binanceMinK 分钟实时K线数据
     * @return 结果
     */
    @Override
    public int updateBinanceMinK(BinanceMinK binanceMinK)
    {
        binanceMinK.setUpdateTime(DateUtils.getNowDate());
        return binanceMinKMapper.updateBinanceMinK(binanceMinK);
    }

    /**
     * 批量删除分钟实时K线数据
     * 
     * @param codes 需要删除的分钟实时K线数据主键
     * @return 结果
     */
    @Override
    public int deleteBinanceMinKByCodes(String[] codes)
    {
        return binanceMinKMapper.deleteBinanceMinKByCodes(codes);
    }

    /**
     * 删除分钟实时K线数据信息
     * 
     * @param code 分钟实时K线数据主键
     * @return 结果
     */
    @Override
    public int deleteBinanceMinKByCode(String code)
    {
        return binanceMinKMapper.deleteBinanceMinKByCode(code);
    }

    @Override
    public void saveOrUpdateMinK(String code, JSONArray jsonArray) {
        if (jsonArray == null || jsonArray.isEmpty()) {
            return;
        }
        for (int i = 0; i < jsonArray.size(); i++) {
            JSONArray array = jsonArray.getJSONArray(i);
            BinanceMinK minK = new BinanceMinK();
            minK.setCode(code);
            minK.setTime(array.getDate(0));
            minK.setOpen(array.getBigDecimal(1));
            minK.setHigh(array.getBigDecimal(2));
            minK.setLow(array.getBigDecimal(3));
            minK.setClose(array.getBigDecimal(4));
            minK.setVolume(array.getBigDecimal(5));
            minK.setCloseTime(array.getDate(6));
            minK.setAmount(array.getBigDecimal(7));
            minK.setNumber(array.getLong(8));
            int updated = updateBinanceMinK(minK);
            if (updated == 0) {
                insertBinanceMinK(minK);
            }
        }
    }
}
